import QualityInspectionApi from '../../../common/api/feed/qualityinspectionList.api.js';
import {
	Select2Page
} from "../../../common/serve-request.js";

(function(window, document, $) {
	let _vm, editId = null;
	let _stuffInfo = {},
		_companyList = [];

	$(function() {
		// 初始化Vue实例
		_vm = new Vue({
			el: "#main",
			data: {
				bizDate: moment(new Date()).format('YYYY-MM-DD'), // 设置默认日期为当天
				inspectionType: '',
				qualityResults: '', // 质检结果
				waybillNo: '',
				vehicleNo: '',
				basicUnit: '',
				quantity: ''
			},
			methods: {}
		});

		// 强制光明模式
		$('body').attr('data-weui-theme', 'light');

		// 获取URL参数，判断是新增还是编辑
		editId = getUrlKey('id');

		// 初始化各组件
		_initInspectionType();
		_initQualityResults();
		_initCompany();
		_initMaterial();
		_initCommands();

		// 如果是编辑模式，加载数据
		if (editId) {
			_loadEditData();
		}
	});

	// 初始化质检类型下拉框
	const _initInspectionType = () => {
		$('#inspectionType')
			.empty()
			.select2({
				placeholder: '请选择质检类型...',
				language: 'zh-CN',
				allowClear: true,
				// dropdownParent: $('#inspectionType').parent(),
				data: [{
						id: '1',
						text: '原料质检'
					},
					{
						id: '2',
						text: '成品质检'
					}
				],
			});
		$('#inspectionType').setSelectValue();

		// 监听选择事件
		$('#inspectionType').on('select2:select', function() {
			let selectedData = $('#inspectionType').select2('data')[0];
			_vm.inspectionType = selectedData.id;
		});

		// 监听清空事件
		$('#inspectionType').on('select2:clear', function() {
			_vm.inspectionType = '';
		});
	};

	// 初始化质检结果下拉框
	const _initQualityResults = () => {
		$('#qualityResults')
			.empty()
			.select2({
				placeholder: '请选择质检结果...',
				language: 'zh-CN',
				allowClear: true,
				// dropdownParent: $('#qualityResults').parent(),
				data: [{
						id: '1',
						text: '合格'
					},
					{
						id: '2',
						text: '不合格'
					}
				],
			});
		$('#qualityResults').setSelectValue();

		// 监听选择事件
		$('#qualityResults').on('select2:select', function() {
			let selectedData = $('#qualityResults').select2('data')[0];
			_vm.qualityResults = selectedData.id;
		});

		// 监听清空事件
		$('#qualityResults').on('select2:clear', function() {
			_vm.qualityResults = '';
		});
	};

	// 初始化命令绑定
	const _initCommands = () => {
		// 业务日期选择事件
		$('#search-date').on('click', function() {
			pick();
		});

		// 取消按钮
		$('#cancelBtn').on('click', function() {
			$.confirm({
				title: '提示',
				text: '确定要取消吗？未保存的数据将会丢失。',
				onOK: function() {
					// 返回列表页
					window.location.href =
						`qualityinspectionList.html?v=${Utils.GetTime()}`;
				}
			});
		});

		// 保存按钮
		$('#saveBtn').on('click', function() {
			_saveData();
		});
	};

	// 日期选择器
	const pick = () => {
		weui.datePicker({
			defaultValue: _vm.bizDate.split('-'), // 当前选中的日期值
			end: moment(new Date()).format('YYYY-MM-DD'), // 最大日期为今天
			className: 'quality-inspection-picker',
			onConfirm: function(result) {
				// result 是一个数组对象，每个元素有 value 属性
				_vm.bizDate = result.map((item) => item.value).join('-');
				$('#bizDate').val(_vm.bizDate); // 同步更新输入框显示
			}
		});
	};


	// 初始化公司选择
	const _initCompany = async () => {
		// 先初始化一个空的 select2，确保页面一开始就显示 select2 样式
		$('#companyId').select2({
			placeholder: '请选择公司',
			language: 'zh-CN',
			allowClear: true,
			data: []
		});
		$('#companyId').setSelectValue();

		try {
			// 获取公司列表
			const orgsResponse = await QualityInspectionApi.getOrgsList();

			// 处理响应数据，确保是数组格式
			let orgsData = [];
			if (Array.isArray(orgsResponse)) {
				orgsData = orgsResponse;
			} else if (orgsResponse?.data && Array.isArray(orgsResponse.data)) {
				orgsData = orgsResponse.data;
			}

			// 转换为Select2所需格式（参考addsalesplan.js第141-150行）
			const selectData = orgsData.map(org => {
				return {
					id: org.id || org.oId,
					text: `${org.name || org.oName}(${org.numCode || org.oNumCode || ''})`,
					name: org.name || org.oName || '',
					numCode: org.numCode || org.oNumCode || ''
				};
			});

			// 清空并重新初始化 Select2，填充真实数据
			$('#companyId').empty().select2({
				placeholder: '请选择公司...',
				language: 'zh-CN',
				allowClear: true,
				// dropdownParent: $('#companyId').parent(),
				data: selectData,
				// 自定义选中后的显示格式，确保长文本不会超出
				templateSelection: function(data) {
					if (!data.id) {
						return data.text;
					}
					// 返回完整文本，让CSS来处理省略显示
					return data.text;
				}
			});

			$('#companyId').setSelectValue();

			// 设置默认值（参考addsalesplan.js第164-184行）
			if (editId) {
				// 编辑模式下会在 _loadEditData 中设置值
			} else if (_stuffInfo.coui) {
				// 设置用户默认公司
				const defaultCompany = selectData.find(c => c.id === _stuffInfo.coui);
				if (defaultCompany) {
					$('#companyId').val(defaultCompany.id).trigger('change');
				}
			}

			// 监听选择事件
			$('#companyId').on('select2:select', function() {
				const selectedCompany = $('#companyId').select2('data')[0];
				console.log('选择的公司:', selectedCompany);
			});

			// 监听清空事件
			$('#companyId').on('select2:clear', function() {
				console.log('清空公司选择');
			});

		} catch (error) {
			console.error('初始化公司选择失败:', error);
			$.toptip('获取公司列表失败', 'warning');
		}
	};

	// 初始化物料选择（保持Select2Page，与adddeathbills的executor类似）
	const _initMaterial = async () => {
		Select2Page(
			$('#materialId'),
			`${Utils.CurDomain.MasterDataUrl}/yymaterials/q`,
			(params) => {
				return ({
					mgroupid: 'SAP-1',
					pagesize: 10,
					pageindex: (params.page || 1) - 1
				})
			},
			'GET', {
				placeholder: '请选择物料...',
				language: 'zh-CN',
				allowClear: true,
				// dropdownParent: $('#materialId').parent(),
				templateResult: function(res) {
					if (!res.id) return res.text;
					return `${res.name}(${res.numCode})`;
				},
			}
		);
		$('#materialId').setSelectValue();

		// 监听物料选择事件
		$('#materialId').on('select2:select', function() {
			let materialData = $('#materialId').select2('data')[0];
			// 可以在这里处理物料选择后的逻辑
			console.log('选择的物料:', materialData);
		});

		// 监听清空事件
		$('#materialId').on('select2:clear', function() {
			console.log('清空物料选择');
		});
	};

	// 加载编辑数据
	const _loadEditData = async () => {
		try {
			$.showLoading('加载中...');
			const response = await QualityInspectionApi.getInspectionOrderDetails(editId);

			if (response) {
				const data = response;

				// 设置表单值
				_vm.bizDate = moment(data.bizFormObj?.bizDate).format('YYYY-MM-DD');
				$('#bizDate').val(_vm.bizDate);

				_vm.waybillNo = data.waybillNo || '';
				_vm.vehicleNo = data.vehicleNo || '';
				_vm.basicUnit = data.basicUnit || '';
				_vm.quantity = data.quantity || '';

				// 设置质检类型（使用setSelectValue方法）
				if (data.type !== undefined && data.type !== null) {
					// API返回数字：1=原料质检, 2=成品质检
					let typeId = String(data.type);
					let typeText = typeId === '1' ? '原料质检' : '成品质检';
					$('#inspectionType').setSelectValue(typeId, typeText);
					_vm.inspectionType = typeId;
				}

				// 设置质检结果（使用setSelectValue方法）
				if (data.qualityResults !== undefined && data.qualityResults !== null) {
					// API返回数字：1=合格, 2=不合格
					let resultId = String(data.qualityResults);
					let resultText = resultId === '1' ? '合格' : '不合格';
					$('#qualityResults').setSelectValue(resultId, resultText);
					_vm.qualityResults = resultId;
				}

				// 设置公司（使用setSelectValue方法）
				if (data.company?.id) {
					$('#companyId').setSelectValue(data.company.id, data.company.name);
				}

				// 设置物料（使用setSelectValue方法）
				if (data.material?.name) {
					// 如果有id用id，否则用name作为值
					const materialId = data.material.id || data.material.name;
					const materialText = data.material.numCode ?
						`${data.material.name}(${data.material.numCode})` :
						data.material.name;
					$('#materialId').setSelectValue(materialId, materialText);
				}

				$.hideLoading();
			}
		} catch (error) {
			$.hideLoading();
			console.error('加载编辑数据失败:', error);
			$.toptip('加载数据失败', 'error');
		}
	};

	// 保存数据
	const _saveData = async () => {
		// 表单验证
		if (!_vm.bizDate) {
			return $.toptip('请选择业务日期!', 'warning');
		}

		const companyData = $('#companyId').select2('data')[0];
		if (!companyData) {
			return $.toptip('请选择公司!', 'warning');
		}

		if (!_vm.inspectionType) {
			return $.toptip('请选择质检类型!', 'warning');
		}

		if (!_vm.qualityResults) {
			return $.toptip('请选择质检结果!', 'warning');
		}

		const materialData = $('#materialId').select2('data')[0];
		if (!materialData) {
			return $.toptip('请选择物料!', 'warning');
		}

		if (!_vm.waybillNo) {
			return $.toptip('请输入运单号!', 'warning');
		}

		if (!_vm.vehicleNo) {
			return $.toptip('请输入车牌号!', 'warning');
		}

		if (!_vm.quantity) {
			return $.toptip('请输入货数量!', 'warning');
		}

		if (!_vm.basicUnit) {
			return $.toptip('请输入基本单位!', 'warning');
		}

		// 验证数量格式（大于0，最多两位小数）
		const reg = /^(?!0+(?:\.0+)?$)(?:[1-9]\d*|0)(?:\.\d{1,2})?$/;
		if (!reg.test(_vm.quantity)) {
			return $.toptip('数量必须大于0并且只能保留两位小数', 'warning');
		}

		// 确认保存
		$.confirm({
			title: '提示',
			text: '是否确认保存该单据？',
			onOK: async function() {
				try {
					$.showLoading('保存中...');

					// 构建保存参数
					const saveParams = {
						bizDate: _vm.bizDate,
						company: {
							id: companyData.id,
							name: companyData.name || companyData.text.split('(')[0]
						},
						material: {
							name: materialData.name || materialData.text.split('(')[0],
							numCode: materialData.numCode || materialData.text.match(
								/\((.*?)\)/)?.[1] || ''
						},
						qualityResults: parseInt(_vm.qualityResults), // 1=合格, 2=不合格
						type: parseInt(_vm.inspectionType), // 1=原料质检, 2=成品质检
						waybillNo: _vm.waybillNo,
						vehicleNo: _vm.vehicleNo,
						basicUnit: _vm.basicUnit,
						quantity: parseInt(_vm.quantity)
					};

					if (editId) {
						// 编辑模式
						await QualityInspectionApi.updateInspectionOrder(editId,
							saveParams);
					} else {
						// 新增模式
						await QualityInspectionApi.createInspectionOrder(saveParams);
					}

					$.hideLoading();

					$.toptip(editId ? '修改成功' : '保存成功', 'success');
					setTimeout(() => {
						// 返回列表页
						window.location.href =
							`qualityinspectionList.html?v=${Utils.GetTime()}`;
					}, 1000);

				} catch (error) {
					$.hideLoading();
					console.error('保存失败:', error);
					$.toptip(error.message || '保存失败，请重试', 'error');
				}
			}
		});
	};

	// 获取URL参数
	const getUrlKey = (name) => {
		const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
		const r = window.location.search.substr(1).match(reg);
		if (r != null) return decodeURIComponent(r[2]);
		return null;
	};

})(window, document, jQuery);